package com.crazypos.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.crazypos.dao.MenuDao;
import com.crazypos.dao.ModuleDao;
import com.crazypos.enums.CanDelete;
import com.crazypos.enums.ModuleStatus;
import com.crazypos.exceptions.MyException;
import com.crazypos.pojo.MenuEntity;
import com.crazypos.pojo.ModuleEntity;
import com.crazypos.pojo.bo.AdminCreateModuleBO;
import com.crazypos.pojo.bo.AdminDeleteModuleBO;
import com.crazypos.pojo.bo.AdminUpdateModuleBO;
import com.crazypos.service.IModuleService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class ModuleService extends ServiceImpl<ModuleDao, ModuleEntity> implements IModuleService {

    @Autowired
    private ModuleDao moduleDao;


    @Override
    public List<ModuleEntity> getAllModule() {
        return moduleDao.selectList(null);
    }

    @Override
    public void createModule(AdminCreateModuleBO bo) {
        ModuleEntity moduleEntity = new ModuleEntity();
        moduleEntity.setCanDelete(bo.getCanDelete());
        moduleEntity.setName(bo.getName());
        moduleEntity.setSlug(bo.getSlug());
        moduleEntity.setStatus(ModuleStatus.NORMAL.getValue());

        moduleDao.insert(moduleEntity);
    }

    @Override
    public void updateModule(AdminUpdateModuleBO bo) {
        int isExist = moduleDao.selectCount(
                new QueryWrapper<ModuleEntity>()
                        .eq("id", bo.getId())
        );

        if (isExist == 0) {
            throw new MyException(404, "module不存在");
        }

        ModuleEntity entity = new ModuleEntity();
        BeanUtils.copyProperties(entity, bo);
        moduleDao.updateById(entity);
    }

    @Override
    public void deleteModule(AdminDeleteModuleBO bo) {
        Integer id = bo.getId();
        int isExist = moduleDao.selectCount(
                new QueryWrapper<ModuleEntity>()
                        .eq("id", id)
                        .eq("can_delete", CanDelete.YES.getValue())
                        .eq("status", ModuleStatus.NORMAL.getValue())
        );
        if (isExist == 0) {
            throw new MyException(404, "module不存在或者已经删除");
        }

        ModuleEntity entity = new ModuleEntity();
        entity.setId(id);
        entity.setStatus(ModuleStatus.DISABLED.getValue());
        moduleDao.updateById(entity);

    }



}
